package com.learning.spark.java.core.memory;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

/**
 * ClassName: MemoryOptimize
 * Description: RDD 内存优化
 * Date: 2018/6/15 16:18 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
public class MemoryOptimize {

    public static void main(String[] args) {

        memory();


    }

    /**
     * 当 RDD 会被复用的时候通常使用持久化策略
     * 这边的Job策略默认是FIFO
     */
    private static void memory() {
        SparkConf conf = new SparkConf().setMaster("local").setAppName("WordCount_Java");
        JavaSparkContext context = new JavaSparkContext(conf);

        // 获取文件,这边的算子是非Action，所以不会执行Job
        JavaRDD<String> text = context.textFile("bigData.txt");

        // 持久化操作
        // 默认是 StorageLevel.MEMORY_ONLY 持久化策略 text = text.persist(StorageLevel.DISK_ONLY())
        text = text.cache();

        // Action 算子，立即执行
        long count = text.count();

        // Action 算子，立即执行
        // 这边 text RDD 如果不做持久化，name会重新读取文件
        // 使用持久化后，直接从内存读取
        long count2 = text.count();
        text.unpersist();
        context.close();
    }

}
